/*
 * Copyright 2015 the SiChuan MiaoQu Technology Co., Ltd.
 *
 * 四川妙趣科技有限公司    http://www.letoo.com
 *
 * Create Date :  2015/12/21
 */

package com.letoo.sso.core.service;

import com.letoo.sso.common.domain.Result;
import com.letoo.sso.dataaccess.datasource.DataSource;
import com.letoo.sso.dataaccess.domain.dbo.UserDO;
import com.letoo.sso.dataaccess.domain.mo.RegisterUserMO;
import com.letoo.sso.dataaccess.domain.mo.ThirdPartyRegisterUserMO;

/**
 * SSO用户服务接口
 * 
 * @author 邓杰
 */
public interface UserService extends BaseService<UserDO> {

    /**
     * 注册接口
     * 
     * @param registerUserMO
     *            封装注册需要信息表单数据
     * @return 结果对象
     */
    @DataSource(value = "master")
    public Result register(final RegisterUserMO registerUserMO);

    /**
     * 第三方注册接口
     * 
     * @param registerUserMO
     *            封装注册需要信息表单数据
     * @return 结果对象
     */
    @DataSource(value = "master")
    public Result thirdPartyRegister(final ThirdPartyRegisterUserMO registerUserMO);

    /**
     * 验证手机号码是否已经注册接口
     * 
     * @param mobile
     *            手机号码
     * @return 结果对象.true表示已经注册，false表示未注册
     */
    @DataSource(value = "master")
    public Result mobileIsExisted(final String mobile);

    /**
     * 登陆接口
     * 
     * @param mobile
     *            手机号码或者miaoId
     * @param password
     *            密码
     * @return
     */
    @DataSource(value = "master")
    public Result login(final String mobileOrMiaoId, final String password, final String clientId);

    /**
     * 第三方登陆接口
     * 
     * @param type
     *            第三方平台类型。1:QQ登陆,2表示微信登陆,3表示微博登陆
     * @param openId
     *            openId。第三方平台的openId
     * @param clientId
     *            个推的clientId
     * @return
     */
    @DataSource(value = "master")
    public Result thirdPartyLogin(final int type, final String openId, final String clientId);

    /**
     * 用户退出注销接口
     * 
     * @param userId
     *            用户ID
     * @return 结果对象。true表示注销成功，false表示失败。
     */
    @DataSource(value = "master")
    public Result logout(final long userId);

    /**
     * 登陆以后修改密码
     * 
     * @param userId
     *            用户ID
     * @param originalPassword
     *            原来密码
     * @param newPassword
     *            新密码
     * @return true表示成功，false表示失败
     */
    @DataSource(value = "master")
    public Result updatePassword(final long userId, final String originalPassword, final String newPassword);

    /**
     * 登陆之前忘记密码中修改密码
     * 
     * @param mobile
     *            用户手机号码
     * @param captcha
     *            发送的验证码
     * @param newPassword
     *            新密码
     * @return true表示成功，false表示失败
     */
    @DataSource(value = "master")
    public Result updatePasswordWhenForget(final String mobile, final String captcha, final String newPassword);

    /**
     * @description 校验邀请者是否合法（邀请者填写：市场推广人员邀请码、miaoId、手机号三者之一，或不填）
     * @author <a href="mailto:ly@letoo.com">刘银</a>
     * @param inviter
     * @return
     */
    @DataSource(value = "slave")
    public Result checkInviter(String inviter);
}
